package com.qf.rbac2202.utils;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jhlabs.image.QuiltFilter;
import javafx.concurrent.Task;

import java.util.Map;
import java.util.Stack;

/**
 * @Author: 可乐
 * @Description:
 * @CreateTime: 2022-11-01  15:34
 */
public class PageQueryUtils < T > {
	public static < T > IPage< T > getPage( Map< String, Object > params ) {
		//设置一个如果没有参数设置默认参数
		Page< T > page=getPage( params,null,false );
		return page;
	}

	private static < T > Page< T > getPage( Map< String, Object > params,String defaultOrderField,boolean isAsc ) {

		//初始化当前页和页容量用于前端没有发送数据的时候
		Long page=1l;
		Long limit=10l;

		//开始判断参数的问题
		if(params.get( Constants.PAGE )!=null) {
			//如果不为空更新参数
			page=Long.parseLong( params.get( Constants.PAGE ).toString( ) );
		}

		if(params.get( Constants.LIMIT )!=null) {
			limit=Long.parseLong( params.get( Constants.LIMIT ).toString( ) );
		}

		//创建一个分页对象
		Page< T > myPage=new Page<>( page,limit );


		//开始考虑是否带有搜素条件和排序条件

		Object t=params.get( Constants.ORDER_FIELD ); //判断穿过来的参数中是否有排序的字段
		Object t1=params.get( Constants.ORDER );//判断要按什么顺序来排列

		//防止非法注入Sql 做一个安全的检查
		String orderField=SQLFilter.sqlInject( t.toString( ) );
		String order=SQLFilter.sqlInject( t1.toString( ) );


		if(orderField!=null && order!=null) {
			if(t1.equals( Constants.ASC )) {
				myPage.addOrder( OrderItem.asc( orderField ) );
			}else {
				myPage.addOrder( OrderItem.desc( orderField) );

			}
		}else if(orderField!=null) {
				myPage.addOrder( OrderItem.asc( orderField ) );
			}

			//如果什么都不传默认就是默认排序
		//默认排序
		if(isAsc) {
			myPage.addOrder( OrderItem.asc( defaultOrderField ) );
		}else {
			myPage.addOrder( OrderItem.desc( defaultOrderField ) );
		}

		return myPage;
	}
}
